System, method, and computer program product for exchanging images

ABSTRACT

A system, method, and computer program product are provided for exchanging images. In use, one or more images are received at a server. Additionally, the one or more images are analyzed. Further, image processing code is outputted referencing the one or more images, based on the analysis of the one or more images. Additional systems, methods, and computer program products are also presented.

RELATED APPLICATIONS

The present application is a continuation-in-part of, and claimspriority to U.S. patent application Ser. No. 14/535,285, entitled“SYSTEM, METHOD, AND COMPUTER PROGRAM PRODUCT FOR EXCHANGING IMAGES,”filed Nov. 6, 2014. The foregoing application and/or patent is hereinincorporated by reference in its entirety for all purposes.

Additionally, this application is a continuation-in-part of, and claimspriority to U.S. patent application Ser. No. 14/517,731, entitled“SYSTEM, COMPUTER PROGRAM PRODUCT, AND METHOD FOR GENERATING ALIGHTWEIGHT SOURCE CODE FOR IMPLEMENTING AN IMAGE PROCESSING PIPELINE,”filed Oct. 17, 2014. The foregoing application and/or patent is hereinincorporated by reference in its entirety for all purposes.

Additionally, this application is a continuation-in-part of, and claimspriority to U.S. patent application Ser. No. 14/503,210, entitled“SYSTEMS, METHODS, AND COMPUTER PROGRAM PRODUCTS FOR DIGITALPHOTOGRAPHY,” filed Sep. 30, 2014. The foregoing application and/orpatent is herein incorporated by reference in its entirety for allpurposes.

Additionally, this application is a continuation-in-part of and claimspriority to U.S. patent application Ser. No. 14/503,224, entitled“SYSTEMS, METHODS, AND COMPUTER PROGRAM PRODUCTS FOR DIGITALPHOTOGRAPHY,” filed Sep. 30, 2014. The foregoing application and/orpatent is herein incorporated by reference in its entirety for allpurposes.

Additionally, this application is a continuation-in-part of, and claimspriority to U.S. patent application Ser. No. 14/547,074, entitled“SYSTEM AND METHOD FOR GENERATING AN IMAGE RESULT BASED ON AVAILABILITYOF A NETWORK RESOURCE,” filed Nov. 18, 2014. The foregoing applicationand/or patent is herein incorporated by reference in its entirety forall purposes.

FIELD OF THE INVENTION

The present invention relates to digital photographic systems, and moreparticularly to systems and methods for exchanging images.

BACKGROUND

Traditional digital photography systems are generally limited by thenumber of ways in which a user can exchange images. One solution to suchlimitation is to transfer images to a second device which can then sharethe images in some manner. Such a solution, however, can be cumbersome,time consuming, and require many steps of interactions before achievingthe desired result. As such, there is thus a need for addressing theseand/or other issues associated with the prior art.

SUMMARY

A system, method, and computer program product are provided forexchanging images. In use, one or more images are received at a server.Additionally, the one or more images are analyzed. Further, imageprocessing code is outputted referencing the one or more images, basedon the analysis of the one or more images. Additional systems, methods,and computer program products are also presented.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 illustrates an exemplary method for outputting image processingcode, in accordance with one possible embodiment.

FIG. 2 illustrates an exemplary system carried out for outputting imageprocessing code, in accordance with one embodiment.

FIG. 3A illustrates a digital photographic system, in accordance with anembodiment.

FIG. 3B illustrates a processor complex within the digital photographicsystem, according to one embodiment.

FIG. 3C illustrates a digital camera, in accordance with an embodiment.

FIG. 3D illustrates a wireless mobile device, in accordance with anotherembodiment.

FIG. 3E illustrates a camera module configured to sample an image,according to one embodiment.

FIG. 3F illustrates a camera module configured to sample an image,according to another embodiment.

FIG. 3G illustrates a camera module in communication with an applicationprocessor, in accordance with an embodiment.

FIG. 4 illustrates a network service system, in accordance with anotherembodiment.

FIG. 5 illustrates a method for constructing a web application, inaccordance with another embodiment.

FIG. 6 illustrates a method for exchanging images, in accordance withanother embodiment.

FIG. 7 illustrates a method for exchanging images, in accordance withanother embodiment.

FIG. 8 illustrates a method for determining whether a filter is to beincluded in a pipeline, in accordance with another embodiment.

FIG. 9 illustrates a user interface (UI) system for generating acombined image, according to one embodiment of the present invention

FIG. 10 is a method for generating a combined image, according to oneembodiment of the present invention.

FIG. 11 illustrates a color adjustment graph for altering a colorassociated with an image, according to one embodiment of the presentinvention.

FIG. 12 illustrates a user interface (UI) for a first user, according toone embodiment of the present invention.

FIG. 13 illustrates a user interface (UI) for a second user, accordingto one embodiment of the present invention.

DETAILED DESCRIPTION

FIG. 1 illustrates an exemplary method 100 for outputting imageprocessing code, in accordance with one embodiment. As an option, themethod 100 may be carried out in the context of the details of any ofthe Figures disclosed herein. Of course, however, the method 100 may becarried out in any desired environment. Further, the aforementioneddefinitions may equally apply to the description below.

As shown, one or more images are received at a server. See operation102. Additionally, the one or more images are analyzed. See operation104. Lastly, image processing code referencing the one or more images isoutputted, based on the analysis of the one or more images. Seeoperation 106.

In the context of the present description, image processing codeincludes code used to process one or more images in some manner. Forexample, in various embodiments, image processing code may includeWebGL, OpenGL, code, OpenCL code, and/or any other code used to processgraphics.

In one embodiment, the one or more images may be received at a serverand analyzed upon receipt. In such an embodiment, the one or more imagesmay be further outputted once the analyzing is complete. As such, in oneembodiment, the flow of actions (e.g. images received, analysis ofimages, etc.) may be continuous until outputting occurs.

In another embodiment, the one or more images may be received and storedon a server, the analyzing and outputting occurring at a later time. Insuch an embodiment, the flow of actions (e.g. images received, analysisof images, etc.) may not be continuous from receipt of the images to theoutputting. Of course, in other embodiments, the images may be storedfor any length of time.

In one embodiment, the one or more images may include ancillary dataassociated with the one or more images. For example, in one embodiment,the one or more images may include metadata (e.g. camera type, filmspeed, ISO, aperture, etc.), and/or any other data (e.g. local URL toimages and/or resources on the device which are being sent to theserver, etc.) associated with the one or more images.

Still yet, in one embodiment, the analyzing may include at least one ofcreating at least one image, creating a high dynamic range (HDR) image,or processing at least one image. Of course, in other embodiments, theanalyzing may include identifying metadata associated with an image,blending (or mixing) two or more images, applying an action based onmetadata, and/or taking any other action associated with the image.Still yet, in some embodiments, analyzing the one or more images mayinclude at least one of correcting white balance, correcting exposurelevels, creating a high dynamic range (HDR) image, setting a blackpoint, setting a white point, performing a dehaze function, performing alevel mapping operation, performing a contrast enhancement operation, oradjusting a HDR strength. In a specific embodiment, a black point may becapable of being adjusted based on input by a user, in anotherembodiment, a white point may be capable of being adjusted based oninput by a user.

In one embodiment, the image processing code may include or reference atleast one image. For example, in such an embodiment, the imageprocessing code may include one or more images, metadata (and/or otherdata) associated with the one or more images, local uniform resourcelocators (URLs) associated with the one or more images, instructions(e.g. for blending, for flattening, for creating a resulting image,etc.), and/or code for processing the one or more images in any manner.For example, in one embodiment, the image processing code may be sentback to a device from which the one or more images were received. Inthis embodiment, the image processing code may not send the originalimages back to the device, as they are already saved on the device, butmay include code for processing (e.g. for blending, for flattening, forcreating a resulting image, etc.) the one or more original images on thedevice. Of course, in such an embodiment, it is presumed that theresulting images can be created based on the one or more originalimages.

In another embodiment, the outputting may include at least one ofproviding access to a constructed web application associated with theone or more images, and/or pushing the web application associated withthe one or more images to a recipient. In such an embodiment, therecipient may receive a URL (e.g. to a web application) and/or anaddress associated with the web application. The web application mayinclude code to process the one or more images, and may permit the user,in real time, to manipulate the one or more images, including, but notlimited to, blending two or more images, altering a parameter (e.g.exposure, ISO, warmth, color, saturation, contrast, etc.), identifyingone or more points of interest (with potentially separate parameters,etc.), and/or applying any other modification to the one or more images.

In one embodiment, the outputting may include at least one of providingaccess to code created for rendering vector graphics in a webapplication, or providing access to a created resulting image whichreferences one or more assets not stored on the server. For example, inone embodiment, one or more sections of code may be associated with aserver, or may be associated entirely with the web application (e.g.functions and/or processing are not stored on a server, etc.). Inanother embodiment, the one or more assets not stored on the server maybe stored on a client device such that a web application uses locallystored images in combination with the web application to create aresulting image. Further, in one embodiment, the outputting may includeproviding access to a created resulting image which references one ormore assets not stored on the server. Additionally, in one embodiment,the one or more assets may be stored locally on a mobile device and/orany device (e.g. computer system, tablet, phone, etc.) which is separatefrom the server.

In an additional embodiment, the image processing code may reference oneor more assets stored locally on the mobile device, as well as aresulting image stored on the server or, optionally, a different server.For example, in one embodiment, the web application may be accessed andutilized on a mobile device, and the image processing code may utilizeone or more images on the mobile device as the basis for creating aresulting image. In one embodiment, the processing may occur via theimage processing code which is sent from the server. Of course, in otherembodiments, the resulting image may be stored in any location,including on the mobile device. In one embodiment, the resulting imagemay replace the one or more images originally used as the basis forcreating the resulting image. In other embodiments, the resulting imagemay be added to the mobile device but not replace the one or moreimages. Still yet, in one embodiment, generating a resulting image maybe based on one or more images, the resulting image being stored on theserver.

In one embodiment, adjustable (e.g., sliding) indicia may be displayedutilizing a web application and one or more images may be blended basedon a first aspect. Further, the one or more images may be blended basedon a first aspect in response to the sliding indicia being manipulatedby a user. In various embodiments, the first aspect may include at leastone of a white balance, a focus, an exposure, a color correction, anintensity, and/or any other aspect associated with the one or moreimages.

In another embodiment, two or more versions of a web applicationassociated with the one or more images may be constructed. For example,in one embodiment, at least one of the two or more versions may beassociated with a paying account, a free account, a subscriptionservice, a premium features account, and/or any other type of account.Of course, in one embodiment, a paying account (or any services basedaccount) may be associated with a user identifier or a user account. Invarious embodiments, each version of the web application may provide adifferent set of features, at least in part, by which the one or moreimages are capable of being manipulated utilizing the web application.

FIG. 2 illustrates an exemplary system 200 carried out for outputtingimage processing code, in accordance with one embodiment. As an option,the system 200 may be implemented in the context of the details of anyof the Figures disclosed herein. Of course, however, the system 200 maybe implemented in any desired environment. Further, the aforementioneddefinitions may equally apply to the description below.

As shown, one or more images 206 may reside within a client 202. In oneembodiment, the client 202 may be connected to a server 204 via a datanetwork 208. For example, in one embodiment, the data network 208 mayinclude an intranet, an internet, a local network (e.g. WLAN, WiFi,etc.), a cellular network, and/or any other type of network exchange.

As shown, one or more images 206 may reside within the server 204. Theone or more images (e.g. from the client, from the server, etc.) 206 maybe evaluated 210. In one embodiment, the evaluation 210 may cause animage 212 to be generated, and may cause a specification 214 to becreated, the specification 214 being used to generate GL 216 (or anyother processing code, etc.). Further, the generated image 212 and thegenerated GL 216 may comprise output 218.

In one embodiment, the evaluation may include generating processing code(e.g. GL code, GL object, WebGL object, etc.). In another embodiment,the evaluation may include forming a stack of images associated withprocessing code. For example, in one embodiment, a stack of images mayinclude a series of more than one images of differing exposure (e.g.EV−1, EV0, and EV+1, etc.) which may be blended to form a HDR image.

In another embodiment, the output 218 may include creating a packageincluding the generated image 212 and the generated GL 216 (or any otherprocessing code). In one embodiment, the output may include pushing thepackage to a client device. For example, the client device may includethe client 202 which may have sent the one or more images 206 to theserver 204. In the context of the present description, a package mayinclude, at a minimum, one or more generated images or references toimages, and processing code for the one or more images.

In one embodiment, the one or more images may be pushed to a server forevaluation, or the one or more images may be already stored on a serverfor evaluation. Additionally, in one embodiment, the one or more imagesmay be cached (e.g. stored, etc.) at a time before the evaluationoccurs. Of course, in another embodiment, the caching may occurautomatically. For example, in one embodiment, the user may have takenone or more photos on a mobile device, the one or more photos beingsaved to the mobile device and automatically uploaded to an onlineserver (e.g. online cache, etc.), whereupon the online server may thenevaluate the one or more photos.

Still yet, in one embodiment, the server may evaluate one image or morethan one image. For example, an evaluation may include multiple framesof an image capture (e.g. with respect to a HDR, with respect tomultiple ambient images and multiple flash images, etc.). In oneembodiment, multiple images may be processed (e.g. individually andcollectively, etc.) via a server, thereby displacing processing demandsfrom a client device (e.g. mobile phone, tablet, etc.). In such anembodiment, the server can process higher quality (e.g. higherresolution, full frame, etc.) images. For example, the server may beconfigured to perform more computationally intensive operations, oroperations that require data that may not stored on the mobile device togenerate the higher quality images.

In one embodiment, the evaluation may include generating an image. As anexample, the generating may include combining multiple images (e.g.creating an HDR, etc.). Additionally, the evaluation may includecreating a specification and then generating GL (e.g. processing code,etc.) associated with the generated image. In one embodiment, thegenerated image may be manipulated based on the generated GL (and/orcreated specification, etc.).

In one embodiment, the specification may be created based on theevaluation performed by the server. For example, in one embodiment, theserver may determine that the image is overexposed and may apply afilter to adjust the exposure, a filter to adjust the color tone, and afilter to adjust the contrast. Such filters may be inputted into thespecification which is used as the basis for creating the processingcode (e.g. GL code, etc.). In one embodiment, the output that is created(e.g. including the generated image and the generated GL, etc.) mayallow the user to modify the one or more filters in some manner. Suchmodification may be associated with a weight value associated with theone or more filters previously defined in the specification andaccounted for in the GL. In this manner, in such an embodiment,modifications made to the filter may be computed by the GL and aresulting image, based on the one or more images (e.g. generated image,etc.) provided by the server and commands as dictated by the GL, may becreated.

In some embodiments, the output may be dependent on a type of client(user account type). For example, in one embodiment, the output may bedesignated for a premium services, free services, subscription service,and/or any other specific service associated with a client orindividual. In another embodiment, the output may include more than oneversions which may take into account the many types of users which mayaccess the web app.

As an example, the output may include a premium service, the premiumservice allowing manipulation of or access to many filters including,but not limited to, exposure, focus; warmth, contrast, saturation,blending, gain, color, and/or any other parameter associated with theone or more images. In one embodiment, such filters may be controlledand/or manipulated through user input. In one embodiment, the user inputmay include a slider, an input box of weights (e.g. increase or decreaseweight of filter, etc.), a gesture (e.g. thumbs up to increase, thumbsdown to decrease, etc.), and/or any other feature which may be used toprovide an input in some manner.

In one embodiment, a user may select a filter to modify an image, and aslider may allow the user to provide input on how to modify theparticular filter with respect to the image. In another embodiment,manipulating a slider may affect one or more filters. For example, inone embodiment, increasing a warmth of a photograph may includeincreasing a blend of a flash image, increasing a gain for an image,increasing a temperature of an image, and/or otherwise changing avariety of filters to optimize the warmth of an image. Of course, anyfilter may be included and/or changed in response to manipulating aslider. In this manner, manipulating a slider may affect and/or changemore than one filter associated with the one or more images.

In another embodiment, the premium service may include the ability tocontrol which images (as provided by the server) are used to create theresulting image. Additionally, the user may be able to select a colorscheme associated with the image, including, but not limited to, RGB,grayscale, CMYK, and/or any other color scale as defined by the user.

In a separate embodiment, the output may include a free service. In suchan embodiment, the user may be able to control a slider, but nototherwise be permitted to control a selection of one or more filters,source of images, and/or color scheme. In some embodiments, manipulatingthe slider may alter one or more underlying filters, the output imagebeing optimized based on the one or more altered filters. In oneembodiment, having a slider associated with more than one filters may beconfigured to optimize the final output. For example, increasing theexposure alone may cause contrast and saturation to be lost in theimage. As such, in one embodiment, saturation may likewise increase asexposure increases to compensate for lost color vibrancy. Of course, inother embodiments, any combination of filters may be used to optimizethe resulting image.

As another example, in one embodiment, modifying a slider may adjustwhite balance, exposure, and color correction. In one embodiment, suchmodification may occur simultaneously. In one embodiment, a singleslider may be used to control all three (or any number) of filters. Inanother embodiment, an option may be provided to separate the sliderinto three or a corresponding number) sliders, each one for the specificfilter (e.g. a slider for white balance, exposure, and color correction,etc.). In this manner, the end user may choose to apply a bundle offilters via one slider, or may have the option to fine tune each of thefilters which were applied.

In one embodiment, the output may include more than one version (e.g.premium, free, etc.) corresponding with specific processing code (e.g.GL code, etc.). In another embodiment, the output may be specific to oneversion (e.g. premium, free, etc.) corresponding with specificprocessing code (e.g. GL code, etc.). In this manner, the outputcorresponding to a specific one version will be more lightweight (e.g.less data required, etc.) than a package including more than oneversion.

In one embodiment, the one or more images may be included in a dynamicimage object (DIO) package. Of course, any functionality associated witha DIO may be included, utilizing the systems and methods disclose withinapplication Ser. No. 14/503,210, filed Sep. 30, 2014, entitled “SYSTEMS,METHODS, AND COMPUTER PROGRAM PRODUCTS FOR DIGITAL PHOTOGRAPHY”; andapplication Ser. No. 14/503,224, filed Sep. 30, 2014, entitled “SYSTEMS,METHODS, AND COMPUTER PROGRAM PRODUCTS FOR DIGITAL PHOTOGRAPHY”, thecontents of each are herein incorporated by reference.

In various embodiments, the output may be self-contained. For example,in one embodiment, the package associated with the output may containail of the processing code necessary to display and manipulate an imagebased on user feedback. In such an embodiment, the manipulation of animage does not require any interaction with a server (e.g. apart fromproviding the package, etc.), as all of the processing code may accountfor manipulation of the image.

Still yet, in one embodiment, applying a modification to the image (e.g.via a slider, etc.) may cause a modification to one or more elementsthat are used in processing code. For example, in one embodiment,modifying a slider may correspond with modifying a uniform which is usedwith GL code to generate a resulting image for display. In this manner,modifications to the image are requested directly to the processing codeof the package without having to call a server.

In one embodiment, the one or more images may include at least somepre-evaluation application. For example, in one embodiment, a clientdevice may use a preconfigured hardware element to correct a whitebalance and/or take any other action which may improve the one or moreimages. In this manner, the one or more images that are sent to theserver (e.g. for storage, for evaluation, etc.) may reflect at leastsome pre-evaluation application. In other embodiments, it may bedetermined that evaluating (e.g. even by hardwired, etc.) may occuroverall faster on a server, in which case, the client device may be usedsimply to capture and send without evaluating the one or more images. Ofcourse, in other embodiments, any interaction between a client deviceand a server may be used to optimize the processing of the one or moreimages.

Additionally, in a further embodiment, the output may include a packageof multiple images, the package referencing local URLs corresponding tothe images, code for processing the one or more images, and/or any otherrelevant information (e.g. metadata, etc.) necessary to effectivelymodify the multiple images to create a final image. Further, the outputmay include a package referencing items both on a client device and inthe package. For example, original images 1 and 2 may be stored on aclient device, and image 3 may be the optimized generated image based onthe original images 1 and 2. The output package may include image 3(e.g. as created by the server, etc.) but not include images 1 and 2 ifthe output package is sent back to the user to manipulate the generatedimage. In such an embodiment, the user may manipulate the image, themanipulation referencing the original images 1 and 2 stored on thedevice, as well as image 3 which is included in the package (as providedby the server). In this manner, the output package may reference one ormore images, which may be stored at more than one storage location.

More illustrative information will now be set forth regarding variousoptional architectures and uses in which the foregoing method may or maynot be implemented, per the desires of the user. It should be stronglynoted that the following information is set forth for illustrativepurposes and should not be construed as limiting in any manner. Any ofthe following features may be optionally incorporated with or withoutthe exclusion of other features described.

FIG. 3A illustrates a digital photographic system 300, in accordancewith one embodiment. As an option, the digital photographic system 300may be implemented in the context of the details of any of the Figuresdisclosed herein. Of course, however, the digital photographic system300 may be implemented in any desired environment. Further, theaforementioned definitions may equally apply to the description below.

As shown, the digital photographic system 300 may include a processorcomplex 310 coupled to a camera module 330 via an interconnect 334. Inone embodiment, the processor complex 310 is coupled to a strobe unit336. The digital photographic system 300 may also include, withoutlimitation, a display unit 312, a set of input/output devices 314,non-volatile memory 316, volatile memory 318, a wireless unit 340, andsensor devices 342, each coupled to the processor complex 310. In oneembodiment, a power management subsystem 320 is configured to generateappropriate power supply voltages for each electrical load elementwithin the digital photographic system 300. A battery 322 may beconfigured to supply electrical energy to the power management subsystem320. The battery 322 may implement any technically feasible energystorage system, including primary or rechargeable battery technologies.Of course, in other embodiments, additional or fewer features, units,devices, sensors, or subsystems may be included in the system.

In one embodiment, a strobe unit 336 may be integrated into the digitalphotographic system 300 and configured to provide strobe illumination350 during an image sample event performed by the digital photographicsystem 300. In another embodiment, a strobe unit 336 may be implementedas an independent device from the digital photographic system 300 andconfigured to provide strobe illumination 350 during an image sampleevent performed by the digital photographic system 300. The strobe unit336 may comprise one or more LED devices, a gas-discharge illuminator(e.g. a Xenon strobe device, a Xenon flash lamp, etc.), or any othertechnically feasible illumination device. In certain embodiments, two ormore strobe units are configured to synchronously generate strobeillumination in conjunction with sampling an image. In one embodiment,the strobe unit 336 is controlled through a strobe control signal 338 toeither emit the strobe illumination 350 or not emit the strobeillumination 350. The strobe control signal 338 may be implemented usingany technically feasible signal transmission protocol. The strobecontrol signal 338 may indicate a strobe parameter (e.g. strobeintensity, strobe color, strobe time, etc.), for directing the strobeunit 336 to generate a specified intensity and/or color of the strobeillumination 350. The strobe control signal 338 may be generated by theprocessor complex 310, the camera module 330, or by any othertechnically feasible combination thereof. In one embodiment, the strobecontrol signal 338 is generated by a camera interface unit within theprocessor complex 310 and transmitted to both the strobe unit 336 andthe camera module 330 via the interconnect 334. In another embodiment,the strobe control signal 338 is generated by the camera module 330 andtransmitted to the strobe unit 336 via the interconnect 334.

Optical scene information 352, which may include at least a portion ofthe strobe illumination 350 reflected from objects in the photographicscene, is focused as an optical image onto an image sensor 332 withinthe camera module 330. The image sensor 332 generates an electronicrepresentation of the optical image. The electronic representationcomprises spatial color intensity information, which may includedifferent color intensity samples (e.g. red, green, and blue light,etc.). In other embodiments, the spatial color intensity information mayalso include samples for white light. The electronic representation istransmitted to the processor complex 310 via the interconnect 334, whichmay implement any technically feasible signal transmission protocol.

In one embodiment, input/output devices 314 may include, withoutlimitation, capacitive touch input surface, a resistive tablet inputsurface, one or more buttons, one or more knobs, light-emitting devices,light detecting devices, sound emitting devices, sound detectingdevices, or any other technically feasible device for receiving userinput and converting the input to electrical signals, or convertingelectrical signals into a physical signal. In one embodiment, theinput/output devices 314 include a capacitive touch input surfacecoupled to a display unit 312. A touch entry display system may includethe display unit 312 and a capacitive touch input surface, also coupledto processor complex 310.

Additionally, in other embodiments, non-volatile (NV) memory 316 isconfigured to store data when power is interrupted. In one embodiment,the NV memory 316 comprises one or more flash memory devices (e.g. ROM,PCM, FeRAM, FRAM, PRAM, MRAM, NRAM, etc.). The NV memory 316 comprises anon-transitory computer-readable medium, which may be configured toinclude programming instructions for execution by one or more processingunits within the processor complex 310. The programming instructions mayimplement, without limitation, an operating system (OS), UI softwaremodules, image processing and storage software modules, one or moreinput/output devices 314 connected to the processor complex 310, one ormore software modules for sampling an image stack through camera module330, one or more software modules for presenting the image stack or oneor more synthetic images generated from the image stack through thedisplay unit 312. As an example, in one embodiment, the programminginstructions may also implement one or more software modules for mergingimages or portions of images within the image stack, aligning at leastportions of each image within the image stack, or a combination thereof.In another embodiment, the processor complex 310 may be configured toexecute the programming instructions, which may implement one or moresoftware modules operable to create a high dynamic range (HDR) image.

Still yet, in one embodiment, one or more memory devices comprising theNV memory 316 may be packaged as a module configured to be installed orremoved by a user. In one embodiment, volatile memory 318 comprisesdynamic random access memory (DRAM) configured to temporarily storeprogramming instructions, image data such as data associated with animage stack, and the like, accessed during the course of normaloperation of the digital photographic system 300. Of course, thevolatile memory may be used in any manner and in association with anyother input/output device 314 or sensor device 342 attached to theprocess complex 310.

In one embodiment, sensor devices 342 may include, without limitation,one or more of an accelerometer to detect motion and/or orientation, anelectronic gyroscope to detect motion and/or orientation, a magneticflux detector to detect orientation, a global positioning system (GPS)module to detect geographic position, or any combination thereof. Ofcourse, other sensors, including but not limited to a motion detectionsensor, a proximity sensor, an RGB light sensor, a gesture sensor, a 3-Dinput image sensor, a pressure sensor, and an indoor position sensor,may be integrated as sensor devices. In one embodiment, the sensordevices may be one example of input/output devices 314.

Wireless unit 340 may include one or more digital radios configured tosend and receive digital data. In particular, the wireless unit 340 mayimplement wireless standards (e.g. WiFi, Bluetooth, NFC, etc.), and mayimplement digital cellular telephony standards for data communication(e.g. CDMA, 3G, 4G, LTE, LTE-Advanced, etc.). Of course, any wirelessstandard or digital cellular telephony standards may be used.

In one embodiment, the digital photographic system 300 is configured totransmit one or more digital photographs to a network-based (online) or“cloud-based” photographic media service via the wireless unit 340. Theone or more digital photographs may reside within either the NV memory316 or the volatile memory 318, or any other memory device associatedwith the processor complex 310. In one embodiment, a user may possesscredentials to access an online photographic media service and totransmit one or more digital photographs for storage to, retrieval from,and presentation by the online photographic media service. Thecredentials may be stored or generated within the digital photographicsystem 300 prior to transmission of the digital photographs. The onlinephotographic media service may comprise a social networking service,photograph sharing service, or any other network-based service thatprovides storage of digital photographs, processing of digitalphotographs, transmission of digital photographs, sharing of digitalphotographs, or any combination thereof. In certain embodiments, one ormore digital photographs are generated by the online photographic mediaservice based on image data (e.g. image stack, HDR image stack, imagepackage, etc.) transmitted to servers associated with the onlinephotographic media service. In such embodiments, a user may upload oneor more source images from the digital photographic system 300 forprocessing by the online photographic media service.

In one embodiment, the digital photographic system 300 comprises atleast one instance of a camera module 330. In another embodiment, thedigital photographic system 300 comprises a plurality of camera modules330. Such an embodiment may also include at least one strobe unit 336configured to illuminate a photographic scene, sampled as multiple viewsby the plurality of camera modules 330. The plurality of camera modules330 may be configured to sample a wide angle view (e.g., greater thanforty-five degrees of sweep among cameras) to generate a panoramicphotograph. In one embodiment, a plurality of camera modules 330 may beconfigured to sample two or more narrow angle views (e.g., less thanforty-five degrees of sweep among cameras) to generate a stereoscopicphotograph. In other embodiments, a plurality of camera modules 330 maybe configured to generate a 3-D image or to otherwise display a depthperspective (e.g. a z-component, etc.) as shown on the display unit 312or any other display device.

In one embodiment, a display unit 312 may be configured to display atwo-dimensional array of pixels to form an image for display. Thedisplay unit 312 may comprise a liquid-crystal (LCD) display, alight-emitting diode (LED) display, an organic LED display, or any othertechnically feasible type of display. In certain embodiments, thedisplay unit 312 may be able to display a narrower dynamic range ofimage intensity values than a complete range of intensity values sampledfrom a photographic scene, such as within a single HDR image or over aset of two or more images comprising a multiple exposure or HDR imagestack. In one embodiment, images comprising an image stack may be mergedaccording to any technically feasible HDR blending technique to generatea synthetic image for display within dynamic range constraints of thedisplay unit 312. In one embodiment, the limited dynamic range mayspecify an eight-bit per color channel binary representation ofcorresponding color intensities. In other embodiments, the limiteddynamic range may specify more than eight-bits (e.g., 10 bits, 12 bits,or 14 bits, etc.) per color channel binary representation.

FIG. 3B illustrates a processor complex 310 within the digitalphotographic system 300 of FIG. 3A, in accordance with one embodiment.As an option, the processor complex 310 may be implemented in thecontext of the details of any of the Figures disclosed herein. Ofcourse, however, the processor complex 310 may be implemented in anydesired environment. Further, the aforementioned definitions may equallyapply to the description below.

As shown, the processor complex 310 includes a processor subsystem 360and may include a memory subsystem 362. In one embodiment, processorcomplex 310 may comprise a system on a chip (SoC) device that implementsprocessor subsystem 360, and memory subsystem 362 comprises one or moreDRAM devices coupled to the processor subsystem 360. In anotherembodiment, the processor complex 310 may comprise a multi-chip module(MCM) encapsulating the SoC device and the one or more DRAM devicescomprising the memory subsystem 362.

The processor subsystem 360 may include, without limitation, one or morecentral processing unit (CPU) cores 370, a memory interface 380,input/output interfaces unit 384, and a display interface unit 382, eachcoupled to an interconnect 374. The one or more CPU cores 370 may beconfigured to execute instructions residing within the memory subsystem362, volatile memory 318, NV memory 316, or any combination thereof.Each of the one or more CPU cores 370 may be configured to retrieve andstore data through interconnect 374 and the memory interface 380. In oneembodiment, each of the one or more CPU cores 370 may include a datacache, and an instruction cache. Additionally, two or more of the CPUcores 370 may share a data cache, an instruction cache, or anycombination thereof. In one embodiment, a cache hierarchy is implementedto provide each CPU core 370 with a private cache layer, and a sharedcache layer.

In some embodiments, processor subsystem 360 may include one or moregraphics processing unit (GPU) cores 372. Each GPU core 372 may comprisea plurality of multi-threaded execution units that may be programmed toimplement, without limitation, graphics acceleration functions. Invarious embodiments, the GPU cores 372 may be configured to executemultiple thread programs according to well-known standards (e.g.OpenGL™, WebGL™ OpenCL™, CUDA™, etc.), and/or any other programmablerendering graphic standard. In certain embodiments, at least one GPUcore 372 implements at least a portion of a motion estimation function,such as a well-known Harris detector or a well-known Hessian-Laplacedetector. Such a motion estimation function may be used at least in partto align images or portions of images within an image stack. Forexample, in one embodiment, an HDR image may be compiled based on animage stack, where two or more images are first aligned prior tocompiling the HDR image.

As shown, the interconnect 374 is configured to transmit data betweenand among the memory interface 380, the display interface unit 382, theinput/output interfaces unit 384, the CPU cores 370, and the GPU cores372. In various embodiments, the interconnect 374 may implement one ormore buses, one or more rings, a cross-bar, a mesh, or any othertechnically feasible data transmission structure or technique. Thememory interface 380 is configured to couple the memory subsystem 362 tothe interconnect 374. The memory interface 380 may also couple NV memory316, volatile memory 318, or any combination thereof to the interconnect374. The display interface unit 382 may be configured to couple adisplay unit 312 to the interconnect 374. The display interface unit 382may implement certain frame buffer functions (e.g. frame refresh, etc).Alternatively, in another embodiment, the display unit 312 may implementcertain frame buffer functions (e.g. frame refresh, etc.). Theinput/output interfaces unit 384 may be configured to couple variousinput/output devices to the interconnect 374.

In certain embodiments, a camera module 330 is configured to storeexposure parameters for sampling each image associated with an imagestack. For example, in one embodiment, when directed to sample aphotographic scene, the camera module 330 may sample a set of imagescomprising the image stack according to stored exposure parameters. Asoftware module comprising programming instructions executing within aprocessor complex 310 may generate and store the exposure parametersprior to directing the camera module 330 to sample the image stack. Inother embodiments, the camera module 330 may be used to meter an imageor an image stack, and the software module comprising programminginstructions executing within a processor complex 310 may generate andstore metering parameters prior to directing the camera module 330 tocapture the image. Of course, the camera module 330 may be used in anymanner in combination with the processor complex 310.

In one embodiment, exposure parameters associated with images comprisingthe image stack may be stored within an exposure parameter datastructure that includes exposure parameters for one or more images. Inanother embodiment, a camera interface unit (not shown in FIG. 3B)within the processor complex 310 may be configured to read exposureparameters from the exposure parameter data structure and to transmitassociated exposure parameters to the camera module 330 in preparationof sampling a photographic scene. After the camera module 330 isconfigured according to the exposure parameters, the camera interfacemay direct the camera module 330 to sample the photographic scene; thecamera module 330 may then generate a corresponding image stack. Theexposure parameter data structure may be stored within the camerainterface unit, a memory circuit within the processor complex 310,volatile memory 318, NV memory 316, the camera module 330, or within anyother technically feasible memory circuit. Further, in anotherembodiment, a software module executing within processor complex 310 maygenerate and store the exposure parameter data structure.

FIG. 3C illustrates a digital camera 302, in accordance with oneembodiment. As an option, the digital camera 302 may be implemented inthe context of the details of any of the Figures disclosed herein. Ofcourse, however, the digital camera 302 may be implemented in anydesired environment. Further, the aforementioned definitions may equallyapply to the description below.

In one embodiment, the digital camera 302 may be configured to include adigital photographic system, such as digital photographic system 300 ofFIG. 3A. As shown, the digital camera 302 includes a camera module 330,which may include optical elements configured to focus optical sceneinformation representing a photographic scene onto an image sensor,which may be configured to convert the optical scene information to anelectronic representation of the photographic scene.

Additionally, the digital camera 302 may include a strobe unit 336, andmay include a shutter release button 315 for triggering a photographicsample event, whereby digital camera 302 samples one or more imagescomprising the electronic representation. In other embodiments, anyother technically feasible shutter release mechanism may trigger thephotographic sample event (e.g. such as a timer trigger or remotecontrol trigger, etc.).

FIG. 3D illustrates a wireless mobile device 376, in accordance with oneembodiment. As an option, the mobile device 376 may be implemented inthe context of the details of any of the Figures disclosed herein. Ofcourse, however, the mobile device 376 may be implemented in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

In one embodiment, the mobile device 376 may be configured to include adigital photographic system (e.g. such as digital photographic system300 of FIG. 3A), which is configured to sample a photographic scene. Invarious embodiments, a camera module 330 may include optical elementsconfigured to focus optical scene information representing thephotographic scene onto an image sensor, which may be configured toconvert the optical scene information to an electronic representation ofthe photographic scene. Further, a shutter release command may begenerated through any technically feasible mechanism, such as a virtualbutton, which may be activated by a touch gesture on a touch entrydisplay system comprising display unit 312, or a physical button, whichmay be located on any face or surface of the mobile device 376. Ofcourse, in other embodiments, any number of other buttons, externalinputs/outputs, or digital inputs/outputs may be included on the mobiledevice 376, and which may be used in conjunction with the camera module330.

As shown, in one embodiment, a touch entry display system comprisingdisplay unit 312 is disposed on the opposite side of mobile device 376from camera module 330. In certain embodiments, the mobile device 376includes a user-facing camera module 331 and may include a user-facingstrobe unit (not shown). Of course, in other embodiments, the mobiledevice 376 may include any number of user-facing camera modules orrear-facing camera modules, as well as any number of user-facing strobeunits or rear-facing strobe units.

In some embodiments, the digital camera 302 and the mobile device 376may each generate and store a synthetic image based on an image stacksampled by camera module 330. The image stack may include one or moreimages sampled under ambient lighting conditions, one or more imagessampled under strobe illumination from strobe unit 336, or a combinationthereof.

FIG. 3E illustrates camera module 330, in accordance with oneembodiment. As an option, the camera module 330 may be implemented inthe context of the details of any of the Figures disclosed herein. Ofcourse, however, the camera module 330 may be implemented in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

In one embodiment, the camera module 330 may be configured to controlstrobe unit 336 through strobe control signal 338. As shown, a lens 390is configured to focus optical scene information 352 onto image sensor332 to be sampled. In one embodiment, image sensor 332 advantageouslycontrols detailed timing of the strobe unit 336 though the strobecontrol signal 338 to reduce inter-sample time between an image sampledwith the strobe unit 336 enabled, and an image sampled with the strobeunit 336 disabled. For example, the image sensor 332 may enable thestrobe unit 336 to emit strobe illumination 350 less than onemicrosecond (or any desired length) after image sensor 332 completes anexposure time associated with sampling an ambient image and prior tosampling a strobe image.

In other embodiments, the strobe illumination 350 may be configuredbased on a desired one or more target points. For example, in oneembodiment, the strobe illumination 350 may light up an object in theforeground, and depending on the length of exposure time, may also lightup an object in the background of the image. In one embodiment, once thestrobe unit 336 is enabled, the image sensor 332 may then immediatelybegin exposing a strobe image. The image sensor 332 may thus be able todirectly control sampling operations, including enabling and disablingthe strobe unit 336 associated with generating an image stack, which maycomprise at least one image sampled with the strobe unit 336 disabled,and at least one image sampled with the strobe unit 336 either enabledor disabled. In one embodiment, data comprising the image stack sampledby the image sensor 332 is transmitted via interconnect 334 to a camerainterface unit 386 within processor complex 310. In some embodiments,the camera module 330 may include an image sensor controller, which maybe configured to generate the strobe control signal 338 in conjunctionwith controlling operation of the image sensor 332.

FIG. 3F illustrates a camera module 330, in accordance with oneembodiment. As an option, the camera module 330 may be implemented inthe context of the details of any of the Figures disclosed herein. Ofcourse, however, the camera module 330 may be implemented in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

In one embodiment, the camera module 330 may be configured to sample animage based on state information for strobe unit 336. The stateinformation may include, without limitation, one or more strobeparameters (e.g. strobe intensity, strobe color, strobe time, etc.), fordirecting the strobe unit 336 to generate a specified intensity and/orcolor of the strobe illumination 350. In one embodiment, commands forconfiguring the state information associated with the strobe unit 336may be transmitted through a strobe control signal 338, which may bemonitored by the camera module 330 to detect when the strobe unit 336 isenabled. For example, in one embodiment, the camera module 330 maydetect when the strobe unit 336 is enabled or disabled within amicrosecond or less of the strobe unit 336 being enabled or disabled bythe strobe control signal 338. To sample an image requiring strobeillumination, a camera interface unit 386 may enable the strobe unit 336by sending an enable command through the strobe control signal 338. Inone embodiment, the camera interface unit 386 may be included as aninterface of input/output interfaces 384 in a processor subsystem 360 ofthe processor complex 310 of FIG. 3B The enable command may comprise asignal level transition, a data packet, a register write, or any othertechnically feasible transmission of a command. The camera module 330may sense that the strobe unit 336 is enabled and then cause imagesensor 332 to sample one or more images requiring strobe illuminationwhile the strobe unit 336 is enabled. In such an implementation, theimage sensor 332 may be configured to wait for an enable signal destinedfor the strobe unit 336 as a trigger signal to begin sampling a newexposure.

In one embodiment, camera interface unit 386 may transmit exposureparameters and commands to camera module 330 through interconnect 334.In certain embodiments, the camera interface unit 386 may be configuredto directly control strobe unit 336 by transmitting control commands tothe strobe unit 336 through strobe control signal 338. By directlycontrolling both the camera module 330 and the strobe unit 336, thecamera interface unit 386 may cause the camera module 330 and the strobeunit 336 to perform their respective operations in precise timesynchronization. In one embodiment, precise time synchronization may beless than five hundred microseconds of event timing error. Additionally,event timing error may be a difference in time from an intended eventoccurrence to the time of a corresponding actual event occurrence.

In another embodiment, camera interface unit 386 may be configured toaccumulate statistics while receiving image data from camera module 330.In particular, the camera interface unit 386 may accumulate exposurestatistics for a given image while receiving image data for the imagethrough interconnect 334. Exposure statistics may include, withoutlimitation, one or more of an intensity histogram, a count ofover-exposed pixels, a count of under-exposed pixels, anintensity-weighted sum of pixel intensity, or any combination thereof.The camera interface unit 386 may present the exposure statistics asmemory-mapped storage locations within a physical or virtual addressspace defined by a processor, such as one or more of CPU cores 370,within processor complex 310. In one embodiment, exposure statisticsreside in storage circuits that are mapped into a memory-mapped registerspace, which may be accessed through the interconnect 334. In otherembodiments, the exposure statistics are transmitted in conjunction withtransmitting pixel data for a captured image. For example, the exposurestatistics for a given image may be transmitted as in-line data,following transmission of pixel intensity data for the captured image.Exposure statistics may be calculated, stored, or cached within thecamera interface unit 386.

In one embodiment, camera interface unit 386 may accumulate colorstatistics for estimating scene white-balance. Any technically feasiblecolor statistics may be accumulated for estimating white balance, suchas a sum of intensities for different color channels comprising red,green, and blue color channels. The sum of color channel intensities maythen be used to perform a white-balance color correction on anassociated image, according to a white-balance model such as agray-world white-balance model. In other embodiments, curve-fittingstatistics are accumulated for a linear or a quadratic curve fit usedfor implementing white-balance correction on an image.

In one embodiment, camera interface unit 386 may accumulate spatialcolor statistics for performing color-matching between or among images,such as between or among an ambient image and one or more images sampledwith strobe illumination. As with the exposure statistics, the colorstatistics may be presented as memory-mapped storage locations withinprocessor complex 310. In one embodiment, the color statistics aremapped in a memory-mapped register space, which may be accessed throughinterconnect 334, within processor subsystem 360. In other embodiments,the color statistics may be transmitted in conjunction with transmittingpixel data for a captured image. For example, in one embodiment, thecolor statistics for a given image may be transmitted as in-line data,following transmission of pixel intensity data for the image. Colorstatistics may be calculated, stored, or cached within the camerainterface 386.

In one embodiment, camera module 330 may transmit strobe control signal338 to strobe unit 336, enabling the strobe unit 336 to generateillumination while the camera module 330 is sampling an image. Inanother embodiment, camera module 330 may sample an image illuminated bystrobe unit 336 upon receiving an indication signal from camerainterface unit 386 that the strobe unit 336 is enabled. In yet anotherembodiment, camera module 330 may sample an image illuminated by strobeunit 336 upon detecting strobe illumination within a photographic scenevia a rapid rise in scene illumination. In one embodiment, a rapid risein scene illumination may include at least a rate of increasingintensity consistent with that of enabling strobe unit 336. In still yetanother embodiment, camera module 330 may enable strobe unit 336 togenerate strobe illumination while sampling one image, and disable thestrobe unit 336 while sampling a different image.

FIG. 3G illustrates camera module 330, in accordance with oneembodiment. As an option, the camera module 330 may be implemented inthe context of the details of any of the Figures disclosed herein. Ofcourse, however, the camera module 330 may be implemented in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

In one embodiment, the camera module 330 may be in communication with anapplication processor 335. The camera module 330 is shown to includeimage sensor 332 in communication with a controller 333. Further, thecontroller 333 is shown to be in communication with the applicationprocessor 335.

In one embodiment, the application processor 335 may reside outside ofthe camera module 330. As shown, the lens 390 may be configured to focusoptical scene information onto image sensor 332 to be sampled. Theoptical scene information sampled by the image sensor 332 may then becommunicated from the image sensor 332 to the controller 333 for atleast one of subsequent processing and communication to the applicationprocessor 335. In another embodiment, the controller 333 may controlstorage of the optical scene information sampled by the image sensor332, or storage of processed optical scene information.

In another embodiment, the controller 333 may enable a strobe unit toemit strobe illumination for a short time duration (e.g. less than onemicrosecond, etc.) after image sensor 332 completes an exposure timeassociated with sampling an ambient image. Further, the controller 333may be configured to generate strobe control signal 338 in conjunctionwith controlling operation of the image sensor 332.

In one embodiment, the image sensor 332 may be a complementary metaloxide semiconductor (CMOS) sensor or a charge-coupled device (CCD)sensor. In another embodiment, the controller 333 and the image sensor332 may be packaged together as an integrated system or integratedcircuit. In yet another embodiment, the controller 333 and the imagesensor 332 may comprise discrete packages. In one embodiment, thecontroller 333 may provide circuitry for receiving optical sceneinformation from the image sensor 332, processing of the optical sceneinformation, timing of various functionalities, and signaling associatedwith the application processor 335. Further, in another embodiment, thecontroller 333 may provide circuitry for control of one or more ofexposure, shuttering, white balance, and gain adjustment. Processing ofthe optical scene information by the circuitry of the controller 333 mayinclude one or more of gain application, amplification, andanalog-to-digital conversion. After processing the optical sceneinformation, the controller 333 may transmit corresponding digital pixeldata, such as to the application processor 335.

In one embodiment, the application processor 335 may be implemented onprocessor complex 310 and at least one of volatile memory 318 and NVmemory 316, or any other memory device and/or system. The applicationprocessor 335 may be previously configured for processing of receivedoptical scene information or digital pixel data communicated from thecamera module 330 to the application processor 335.

FIG. 4 illustrates a network service system 400, in accordance with oneembodiment. As an option, the network service system 400 may beimplemented in the context of the details of any of the Figuresdisclosed herein. Of course, however, the network service system 400 maybe implemented in any desired environment. Further, the aforementioneddefinitions may equally apply to the description below.

In one embodiment, the network service system 400 may be configured toprovide network access to a device implementing a digital photographicsystem. As shown, network service system 400 includes a wireless mobiledevice 376, a wireless access point 472, a data network 474, data center480, and a data center 481. The wireless mobile device 376 maycommunicate with the wireless access point 472 via a digital radio link471 to send and receive digital data, including data associated withdigital images. The wireless mobile device 376 and the wireless accesspoint 472 may implement any technically feasible transmission techniquesfor transmitting digital data via digital a radio link 471 withoutdeparting the scope and spirit of the present invention. In certainembodiments, one or more of data centers 480, 481 may be implementedusing virtual constructs so that each system and subsystem within agiven data center 480, 481 may comprise virtual machines configured toperform specified data processing and network tasks. In otherimplementations, one or more of data centers 480, 481 may be physicallydistributed over a plurality of physical sites.

The wireless mobile device 376 may comprise a smart phone configured toinclude a digital camera, a digital camera configured to includewireless network connectivity, a reality augmentation device, a laptopconfigured to include a digital camera and wireless networkconnectivity, or any other technically feasible computing deviceconfigured to include a digital photographic system and wireless networkconnectivity.

In various embodiments, the wireless access point 472 may be configuredto communicate with wireless mobile device 376 via the digital radiolink 471 and to communicate with the data network. 474 via anytechnically feasible transmission media, such as any electrical,optical, or radio transmission media. For example, in one embodiment,wireless access point 472 may communicate with data network 474 throughan optical fiber coupled to the wireless access point 472 and to arouter system or a switch system within the data network 474. A networklink 475, such as a wide area network (WAN) link, may be configured totransmit data between the data network 474 and the data center 480.

In one embodiment, the data network 474 may include routers, switches,long-haul transmission systems, provisioning systems, authorizationsystems, and any technically feasible combination of communications andoperations subsystems configured to convey data between networkendpoints, such as between the wireless access point 472 and the datacenter 480. In one implementation, a wireless the mobile device 376 maycomprise one of a plurality of wireless mobile devices configured tocommunicate with the data center 480 via one or more wireless accesspoints coupled to the data network 474.

Additionally, in various embodiments, the data center 480 may include,without limitation, a switch/router 482 and at least one data servicesystem 484. The switch/router 482 may be configured to forward datatraffic between and among a network link 475, and each data servicesystem 484. The switch/router 482 may implement any technically feasibletransmission techniques, such as Ethernet media layer transmission,layer 2 switching, layer 3 routing, and the like. The switch/router 482may comprise one or more individual systems configured to transmit databetween the data service systems 484 and the data network 474.

In one embodiment, the switch/router 482 may implement session-levelload balancing among a plurality of data service systems 484. Each dataservice system 484 may include at least one computation system 488 andmay also include one or more storage systems 486. Each computationsystem 488 may comprise one or more processing units, such as a centralprocessing unit, a graphics processing unit, or any combination thereof.A given data service system 484 may be implemented as a physical systemcomprising one or more physically distinct systems configured to operatetogether. Alternatively, a given data service system 484 may beimplemented as a virtual system comprising one or more virtual systemsexecuting on an arbitrary physical system. In certain scenarios, thedata network 474 may be configured to transmit data between the datacenter 480 and another data center 481, such as through a network link476.

In another embodiment, the network service system 400 may include anynetworked mobile devices configured to implement one or more embodimentsof the present invention. For example, in some embodiments, apeer-to-peer network, such as an ad-hoc wireless network, may beestablished between two different wireless mobile devices. In suchembodiments, digital image data may be transmitted between the twowireless mobile devices without having to send the digital image data toa data center 480.

FIG. 5 illustrates a method 500 for constructing a web application, inaccordance with another embodiment. As an option, the method 500 may beimplemented in the context of the details of any of the Figuresdisclosed herein. Of course, however, the method 500 may be implementedin any desired environment. Further, the aforementioned definitions mayequally apply to the description below.

As shown, the method begins with receiving an image. See operation 502.As described hereinabove, the image may include one or more images,which may be received by a server. After being received, the one or moreimages may be evaluated. See operation 504.

In one embodiment, the evaluation may include generating processing code(e.g. GL code, GL object, WebGL object, etc.). In another embodiment,the evaluation may include forming a stack of images associated withprocessing code. For example, in one embodiment, a stack of images mayinclude a series of EV−1, EV0, and EV+1 images which may be blended toform a HDR image. Additionally, the evaluation may include generating animage. As an example, the generating may include combining multipleimages (e.g. creating an HDR, etc.). Additionally, the evaluation mayinclude creating a specification and then generating processing codeassociated with the generated image. In one embodiment, the generatedimage may be manipulated based on the processing code (and/or createdspecification, etc.).

As shown, it is determined if the evaluation is complete. See decision506. In one embodiment, an evaluation may proceed in steps, includingfor example, correcting a white balance, correcting a saturation,creating processing code, creating a blended image, and/or taking anyseries of actions. In a separate embodiment, an evaluation may proceedin a parallel fashion whereby each of the filters (e.g. white balance,saturation, etc.) and/or processing (e.g. create GL code, create blendedimage, etc.) may occur near simultaneously.

After completing the evaluation, an image may be generated. Seeoperation 508. In one embodiment, the image may be generated at theconclusion of an evaluation step (e.g. after filters have beenidentified and applied, etc.). In another embodiment, the image may begenerated as part of the evaluation step.

After an image is generated, a web application is constructed. Seeoperation 510. In one embodiment, the web application may be createdbased on an output including a package, the package including agenerated image, processing code (e.g. GL code, etc.), and/or any otherdata necessary to independently control and modify the generated image.In one embodiment, the package may include a web application.

In one embodiment, multiple versions or a specific version based on auser account type of a web application may be created prior tooutputting a package. For example, in one embodiment, a premium (paid)version and/or a free version web application may be created, but theoutput package may include one and/or both of the versions, depending onthe intended recipient.

For example, as shown, after constructing a web application, it isdetermined whether there is a paying account. See decision 512. In oneembodiment, if it is a paying account, a full functionality applicationmay be provided. See operation 514. In another embodiment, if an accountis not a paying account, then a limited functionality application may beprovided. See operation 516. Further, it is determined whether feedbackis received. See decision 518.

In one embodiment, a first feedback may be associated with a fullfunctionality application and a second feedback may be associated with alimited functionality application. For example, in one embodiment, thefirst feedback may include one or more modifications made to one or morefeatures. In another embodiment, the second feedback may include one ormore modifications made to a single feature.

For example, in various embodiments, the first feedback may be comprisedof multiple settings, including a modification made to a filter (e.g.white balance, saturation, etc.), to processing (e.g. GL code, blendingof two or more images, etc.), to the selected images (e.g. used as thebasis for blending, etc.), and/or any other modification. In oneembodiment, the first feedback may include a first modification and asecond modification, the first modification and second modificationbeing received simultaneous and/or at a separate time. For example, inone embodiment, a first modification may be received at a first time anda second modification may be received at a second time, wherein thefirst time and the second time are different times. Additionally, thefirst modification may include a set of modifications and the secondmodification may include a set of modifications.

As shown, if feedback is received, then the modification(s) aredisplayed on the full functionality application or the limitedfunctionality application, depending on whether the web application isassociated with a paying account. In one embodiment, the web applicationmay include processing code necessary to implement the changes receivedvia the feedback. In another embodiment, the feedback may be sent to aserver to generate an image, and reconstruct a web application. In suchan embodiment, it may be necessary to send such feedback to a server inthe event that, for example, a custom setting or a new filter is createdby the user. In other embodiments, however, if a new filter or customfilter is not created, then the processing code contained in the webapplication may contain all of the code necessary to implement the oneor more modifications inputted by the user.

FIG. 6 illustrates a method 600 for exchanging images, in accordancewith another embodiment. As an option, the method 600 may be implementedin the context of the details of any of the Figures disclosed herein. Ofcourse, however, the method 600 may be implemented in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

As shown, one or more images are selected. See operation 602.Additionally, a package of the one or more images and metadata iscreated. See operation 604. Local URLs for the client device areidentified. See operation 606. Further, the package is sent from theclient device to the server. See operation 608.

In one embodiment, the selection of the one or more images may occurmanually. For example, in one embodiment, after capturing a number ofimages, a user may select all or a subset of the captured images. Inanother embodiment, the selection of the one or more images may occurautomatically. For example, in one embodiment, after capturing a singleimage, the image may be automatically packaged and sent to a server forprocessing. In another embodiment, the package may be sent once athreshold is reached (e.g. a minimum of five photos, a set number ofphotos within a specified time frame, etc).

In various embodiments, local URLs may be identified once the package iscreated. For example, before sending the package to a server, the devicemay analyze the contents of the package and provide a local URL for anyresource e.g. photo, metadata, data, etc.) being transferred. In aseparate embodiment, local URLs may be already associated with the oneor more images and/or metadata. For example, in one embodiment, when oneor more images are selected, the selection may inherently include anaddress to the one or more images (e.g. sdcard/DCIM/images/image001.jpg,etc.). In such an embodiment, the address associated with the locationof the image to be uploaded may be used as an identification (includedin the package) of a local URL. For example, when a hypothetical image01 is selected on client device X, the address of the location where theimage is stored is first determined. Such a location may be included inthe package which is subsequently sent to a server for processing. Theserver may identify which assets are stored locally on client device X.

As shown, the one or more images are processed at the server. Seeoperation 610. In one embodiment, the processing at the server may beanalogous to evaluating image in operation 504. The processing mayanalyze the one or more images, the associated metadata, and/or anyother data which is contained in the sent package. In one embodiment,the processing may include enhancing the image in some manner (e.g.correct white balance, fix contrast, etc.). In other embodiments, theprocessing may include blending two or more photos (e.g. mix an ambientphoto and a flash photo, etc.), creating a new generated image (e.g.based off of enhancing and/or any other action, etc.), and/or taking anyother action with respect to the sent package.

As shown, after processing the one or more images at the server (and anyother data sent), it is determined whether local URLs are identified.See decision 612. In various embodiments, local URLs may be previouslyidentified and sent by the client device. In other embodiments, localURLs may be assigned by a server. For example, in one embodiment, theserver may identify a first client device as the source of the sent oneor more images. In such an embodiment, the server may identify thelocation (e.g. on the storage medium) of the one or more images, and/ormay identify simply the source (e.g. the device, etc.).

In one embodiment, if the server identifies the source and not the fulllocation, the local URL may be incomplete (e.g. the full address to theresource may not be identified, etc.). In such an embodiment, whensending the modified package back to the client, the server may requestwhether the resources initially sent can be located on the clientdevice. If so, then then the server may not include such one or moreimages. In the event, however, that the client device cannot locate theone or more images, then the server may send the one or more images backto the client device.

As shown, if local URLs are identified, then a reduced package is sentback to the client. See operation 614. Additionally, if local URLs arenot identified, then a full package is sent back to the client. Seeoperation 616.

In one embodiment, a reduced package may include any data less than afull package, the full package containing all images, metadata, code(e.g. GL, etc.) necessary to enable an independent web application. Inanother embodiment, a reduced package may not include those resources(e.g. images, etc.) for which a local UPI was identified. In someembodiments, a reduced package may include a full package but at a loweroverall data amount. For example, in one embodiment, the one or moreimages may be compressed in some manner to minimize data exchange. Insuch an embodiment, the client web application may use lower resolutionphotos to manipulate the photo. After manipulating the photos via theweb application, the instructions as dictated by the user may be sentback to the server to create a full resolution generated image. Such afull resolution generated image may then be returned to the client (e.g.via, email, via an application, via a cloud storage service, etc.).

In the context of the present description, a local URL may include anyreference to a resource stored on a local device. In one embodiment, alocal URL may refer to the storage location of an image. Additionally, alocal URL may refer to an object that resides within the mobile device,such as within a local file system associated with the mobile device.

FIG. 7 illustrates a method 700 for exchanging images, in accordancewith another embodiment. As an option, the method 700 may be carried outin the context of the details of any of the Figures disclosed herein. Ofcourse, however, the method 700 may be carried out in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

As shown, a client 708 may include a package 702. In one embodiment, thepackage 702 may include one or more images (e.g. EV−2, EV0, EV+2, etc.),metadata associated with the one or more images, metadata associatedwith the device (e.g. camera, mobile device, etc.), and/or any otherpertinent data relating to the one or more images. In variousembodiments, the package may include local URLs 704 which may provide alocation for any of the resources (e.g. one or more images, metadata,etc.). The package is then sent 706 from a client 708 to a server 710.

In one embodiment, the package may be processed 712 which may includeevaluating one or more images, metadata, and/or any of the data which issent from the client device. In another embodiment, the processing mayinclude taking an action (e.g. blend two or more images, enhance the oneor more images, etc.).

As shown, a revised image package 714 may be created. In one embodiment,the revised image package may include blending instructions, code (e.g.GL code, etc), a generated image (e.g. based on the one or more images,etc.), data necessary for a web application (e.g. full functionality webapplication, limited functionality web application, etc.), and/or anyother information which may be associated with the one or more images.

In one embodiment, more than one revised package may be created ordifferent revised packages may be created based on the original imagepackage 702. For example, a revised package may be created for a limitedfunctionality application, for a full functionality application, for aclient which has one or more resources (e.g. local URLs, images,metadata, etc.), for a mobile-version web application, for adesktop-version web application, for a reduced size package, and/or anycombination of the foregoing. As such, in some embodiments, multipleversions of an image package may be created. In some embodiments, theversion of the revised image package created may depend on the intendeddestination. For example, in one embodiment, the end destination mayinclude a user which pays for a premium service for access to more orall of the functions and controls of the web application. In such anembodiment, a revised image package may be created such that the enddestination has full access to the functions and controls of the webapplication. Of course, in other embodiments, any type of revised imagepackage may be created which may be associated with the intendeddestination in some manner.

As shown, the revised image package may be sent 718 from the server 710to the client 708. Additionally, the received image package 720 may bereceived from the server.

In one embodiment, the received image package may not include thoseresources which are already provided for on the client device. Forexample, in various embodiments, a client device may include one or moreimages as well as associated metadata. As such, when the received imagepackage is received from the server, the package may not include suchresources, but only include those items which were not previously foundon the client device. For example, one or more objects, resources,and/or code may have originated on the server device, and thereforewould not be found on the original client device. As such, the revisedimage package may include those items which originated from the serverdevice and which did not originally come from the client device. Ofcourse, in other embodiments, the revised image package may includeobjects from any location (e.g. server, client, etc.).

In some embodiments, the received image package may be sent on atemporary basis to the client device. For example, in one embodiment,the received image package may be sent to the client for approval, afterwhich the received image package may be publicly released. In otherembodiments, an action may be taken (e.g. generate full resolutioncombined image, etc.), a full feature web application may be released(e.g. in response to being approve for premium features, etc.), and/orany other action may be taken in response to receiving feedback (e.g.approval, etc.) from the client.

FIG. 8 illustrates a method 800 for determining whether a filter is tobe included a pipeline, in accordance with another embodiment. As anoption, the method 800 may be implemented in the context of the detailsof any of the Figures disclosed herein. Of course, however, the method800 may be implemented in any desired environment. Further, theaforementioned definitions may equally apply to the description below.

As shown, a method 800 may include identifying one or more sourceimages. See operation 802. It is then determined whether filter 1 ismodified, whether filter 2 is modified, and/or whether filer 3 ismodified. See decisions 804, 806, 808. If it is determined that filter1, filter 2, and/or filter 3 has been modified, then the input is sentto GL code. See object 810. Further, after input from GL Code hasconcluded, or if no filter is modified, then a resulting image iscreated. See operation 812.

In various embodiments, the image package 814 may be independent ofother resources, such that when one or more inputs are received (e.g. amodification to filter 1, filter 2, filter 3, etc.), the image packagecan receive such inputs and provide an output without having to fetchand/or retrieve data or code from another source.

In some embodiments, filter 1, filter 2, filter 3, and/or any number offilters may relate to color modification and mapping (e.g., whitebalance, saturation, color selection, hue mapping, etc.), exposure,contrast, general level mapping, any sampling kernel filter, any mixingfilter (e.g., of two or more input images), and/or any other parameterassociated with an image. In other embodiments, an application (e.g. webapplication, etc.) may dictate what parameters should be applied for thefilters. In one embodiment, a filter may be comprised of multipleparameters (e.g. white balance, exposure, warmth, etc.) whereinmodification to one filter value may modify multiple parameters. Inanother embodiment, a filter may include a dehazing and/or a blurringoperation.

In one embodiment, the image package 814 may be provided by a server torun locally on a client device. For example, in one embodiment, the GLcode included in the image package may provide the functionality suchthat inputs may be received, modifications to the one or more images mayoccur (e.g. based on the inputs, etc.), and/or a resulting image may becreated.

FIG. 9 illustrates a user interface (UI) system 900 for generating acombined image 920, according to one embodiment of the presentinvention. As an option, the UI system 900 may be implemented in thecontext of the details of any of the Figures disclosed herein. Ofcourse, however, the UI system 900 may be carried out in any desiredenvironment. Further, the aforementioned definitions may equally applyto the description below.

In one embodiment, a combined image 920 comprises a combination of atleast two related digital images. In one embodiment, the combined image920 comprises, without limitation, a combined rendering of a firstdigital image and a second digital image. In another embodiment, thedigital images used to compute the combined image 920 may be generatedby amplifying an analog signal with at least two different gains, wherethe analog signal includes optical scene information captured based onan optical image focused on an image sensor. In yet another embodiment,the analog signal may be amplified using the at least two differentgains on a pixel-by-pixel, line-by-line, or frame-by-frame basis.

In one embodiment, the UI system 900 presents a display image 910 thatincludes, without limitation, a combined image 920, a slider control 930configured to move along track 932, and two or more indication points940, which may each include a visual marker displayed within displayimage 910.

In one embodiment, the UI system 900 is generated by an adjustment toolexecuting within a processor complex 310 of a digital photographicsystem 300, and the display image 910 is displayed on display unit 312.In one embodiment, at least two digital images, such as the at least tworelated digital images, comprise source images for generating thecombined image 920. The at least two digital images may reside within NVmemory 316, volatile memory 318, memory subsystem 362, or anycombination thereof. In another embodiment, the UI system 900 isgenerated by an adjustment tool executing within a computer system, suchas a laptop computer or a desktop computer. The at least two digitalimages may be transmitted to the computer system or may be generated byan attached camera device. In yet another embodiment, the system 900 maybe generated by a cloud-based server computer system, which may downloadthe at least two digital images to a client browser, which may executecombining operations described below. In another embodiment, the system900 is generated by a cloud-based server computer system, which receivesthe at least two digital images from a digital photographic system in amobile device, and which may execute the combining operations describedbelow in conjunction with generating combined image 920.

The slider control 930 may be configured to move between two end pointscorresponding to indication points 940-A and 940-B. One or moreindication points, such as indication point 940-C may be positionedbetween the two end points. Each indication point 940 may be associatedwith a specific version of combined image 920, or a specific combinationof the at least two digital images. In one embodiment, when the slidercontrol 930 is positioned directly over the indication point 940-A, onlythe first digital image may be displayed as the combined image 920 inthe display image 910, and similarly when the slider control 930 ispositioned directly over the indication point 940-B, only the seconddigital image may be displayed as the combined image 920 in the displayimage 910.

In one embodiment, indication point 940-C may be associated with ablending of the first digital image and the second digital image. Forexample, when the slider control 930 is positioned at the indicationpoint 940-C, the combined image 920 may be a blend of the first digitalimage and the second digital image. In one embodiment, blending of thefirst digital image and the second digital image may comprise alphablending, brightness blending, dynamic range blending, and/or tonemapping or other non-linear blending and mapping operations. In anotherembodiment, any blending of the first digital image and the seconddigital image may provide a new image that has a greater dynamic rangeor other visual characteristics that are different than either of thefirst image and the second image alone. Thus, a blending of the firstdigital image and the second digital image may provide a new computedHDR image that may be displayed as combined image 920 or used togenerate combined image 920. To this end, a first digital signal and asecond digital signal may be combined, resulting in at least a portionof a HDR image. Further, one of the first digital signal and the seconddigital signal may be further combined with at least a portion ofanother digital image or digital signal. In one embodiment, the otherdigital image may include another HDR image.

In one embodiment, when the slider control 930 is positioned at theindication point 940-A, the first digital image is displayed as thecombined image 920, and when the slider control 930 is positioned at theindication point 940-B, the second digital image is displayed as thecombined image 920; furthermore, when slider control 930 is positionedat indication point 940-C, a blended image is displayed as the combinedimage 920. In such an embodiment, when the slider control 930 ispositioned between the indication point 940-A and the indication point940-B, a mix (e.g. blend) weight may be calculated for the first digitalimage and the second digital image. For the first digital image, the mixweight may be calculated as having a value of 0.0 when the slidercontrol 930 is at indication point 940-B and a value of 1.0 when slidercontrol 930 is at indication point 940-A, with a range of mix weightvalues between 0.0 and 1.0 located between the indication points 940-Band 940-A, respectively. Referencing the mix operation, the mix weightmay be calculated as having a value of 0.0 when the slider control 930is at indication point 940-A and a value of 1.0 when slider control 930is at indication point 940-B, with a range of mix weight values between0.0 and 1.0 located between the indication points 940-A and 940-B,respectively.

In one embodiment, a mix operation may be applied to the first digitalimage and the second digital image based upon at least one mix weightvalue associated with at least one of the first digital image and thesecond digital image. In one embodiment, a mix weight of 1.0 givescomplete mix weight to the digital image associated with the 1.0 mixweight. In this way, a user may blend between the first digital imageand the second digital image. To this end, a first digital signal and asecond digital signal may be blended in response to user input. Forexample, sliding indicia may be displayed, and a first digital signaland a second digital signal may be blended in response to the slidingindicia being manipulated by a user.

This system of mix weights and mix operations provides a UI tool forviewing the first digital image, the second digital image, and a blendedimage as a gradual progression from the first digital image to thesecond digital image. In one embodiment, a user may save a combinedimage 920 corresponding to an arbitrary position of the slider control930. The adjustment tool implementing the UL system 900 may receive acommand to save the combined image 920 via any technically feasiblegesture or technique. For example, the adjustment tool may be configuredto save the combined image 920 when a user gestures within the areaoccupied by combined image 920. Alternatively, the adjustment tool maysave the combined image 920 when a user presses, but does not otherwisemove the slider control 930. In another implementation, the adjustmenttool may save the combined image 920 when a user gestures, such as bypressing a UI element (not shown), such as a save button, dedicated toreceive a save command.

To this end, a slider control may be used to determine a contribution oftwo or more digital images to generate a final computed image, such ascombined image 920. Persons skilled in the art will recognize that theabove system of mix weights and mix operations may be generalized toinclude two or more indication points, associated with two or morerelated images without departing the scope and spirit of the presentinvention. Such related images may comprise, without limitation, anynumber of digital images that have been generated using a same analogsignal to have different brightness values, which may have zerointerframe time.

Furthermore, a different continuous position UI control, such as arotating knob, may be implemented rather than the slider 930 to providemix weight input or color adjustment input from the user.

Of course, in other embodiments, other user interfaces may be used toreceive input relating to selecting one or more points of interest (e.g.for focus, for metering, etc.), adjusting one or more parametersassociated with the image (e.g. white balance, saturation, exposure,etc.), and/or any other input which may affect the image in some manner.

As shown, in a particular embodiment, the UI System 900 may include anindication point for cooler/more ambient 942 and/or warmer/more flash944. Of course, one or more indication points may be used for anyparameter.

In one embodiment, the cooler/more ambient indication point 942 maycontrol an exposure value, a white balance, a warmth (e.g. temperature,etc.), a blending priority for the ambient photo, etc. In otherembodiments, the warmer, more flash indication point 944 may control anexposure value, a white balance, a warmth (e.g. temperature, etc.) ablending priority for the flash photo, etc. Of course, in oneembodiment, any combination of parameters may be used and/or controlledby a single indication point.

In another embodiment, an indication point may include one or moreparameters. Still yet, in one embodiment, an advanced user may expandthe slider to display each parameter associated with the indicationpoint. For example, in one embodiment, a slider may be expanded todisplay an individual slider associated with each parameter related tothe indication point. For example, in one embodiment, an indicationpoint may control, in combination, an exposure value, a white balance, awarmth, and a blending priority. In one embodiment, such parameters maybe expanded such that an individual slider may be displayed for each ofan exposure value, a white balance, a warmth, and a blending priority.In this manner, an advanced user may have fine-grain control over howparameters are implemented. Nonetheless, in some embodiments, thedefault settings associated with the indication (having the parametersin combination, etc.) may be associated with optimized settings (e.g.based on the type of photos, camera, date, time, etc.).

FIG. 10 is a method 1000 for generating a combined image, according toone embodiment of the present invention. As an option, the method 1000may be carried out in the context of the details of any of the Figuresdisclosed herein. Of course, however, the method 1000 may be carried outin any desired environment. Further, the aforementioned definitions mayequally apply to the description below.

The method 1000 begins in step 1010, where an adjustment tool executingwithin a processor complex, such as processor complex 310, loads atleast two related source images, such as the first digital image and thesecond digital image described in the context of FIG. 9. In step 1012,the adjustment tool initializes a position for a UI control, such asslider control 930 of FIG. 9, to a default setting. In one embodiment,the default setting comprises an end point, such as indication point940-A, for a range of values for the UI control. In another embodiment,the default setting comprises a calculated value based on one or more ofthe at least two related source images. In certain embodiments, thedefault setting is initialized to a value previously selected by a userin association with an image object comprising at least the firstdigital image and the second digital image.

In step 1014, the adjustment tool generates and displays a combinedimage, such as combined image 920 of FIG. 9, based on a position of theUI control and the at least two related source images. In oneembodiment, generating the combined image comprises mixing the at leasttwo related source images as described previously in FIG. 9. In step1016, the adjustment tool receives user input. The user input mayinclude, without limitation, a IA gesture such as a selection gesture orclick gesture within display image 910. If, in step 1020, the user inputshould change the position of the UI control, then the adjustment toolchanges the position of the UI control and the method proceeds back tostep 1014. Otherwise, the method proceeds to step 1030.

If, in step 1030, the user input does not comprise a command to exit,then the method proceeds to step 1040, where the adjustment toolperforms a command associated with the user input, in one embodiment,the command comprises a save command and the adjustment tool then savesthe combined image, which is generated according to a position of the UIcontrol. The method then proceeds back to step 1016.

Returning to step 1030, if the user input comprises a command to exit,then the method terminates in step 1090, where the adjustment toolexits, thereby terminating execution.

Of course, in various embodiments, the adjustment tool may be used toblend one or more points of interest, one or more white-balance points,and/or any other parameter associated with the image. In someembodiments, the adjustment tool may relate to a full scene (e.g. entireimage, etc.) associated with two or more images. In other embodiments,the adjustment tool may relate to a subset (e.g. a particular point(s),etc.) of the image.

FIG. 11 illustrates a color adjustment graph 1100 for altering a colorassociated with an image, according to one embodiment of the presentinvention. As an option, the color operation 1100 may be implemented inthe context of the details of any of the Figures disclosed herein. Ofcourse, however, the color operation 1100 may be implemented in anydesired environment. Further, the aforementioned definitions may equallyapply to the description below.

As shown, a color adjustment graph 1102 is included. The coloradjustment graph 1102 may include a first color curve, green 1104, asecond color curve, blue 1106, and a third color curve, red 1108.Further, a cooler indication point 1110 and a warmer 1112 may beincluded.

In various embodiments, the color adjustment graph 1102 may relate tocolor adjustment, including, but not limited to, white balance,warming/cooling, saturation, temperature, color scheme (e.g. b&w, sepia,etc.), selective color schemes (e.g. only display color red, etc.), etc.In one embodiment, the horizontal axis may represent a color adjustmentvalue. Additionally, as shown in one embodiment, as the color adjustmentvalues decrease, the color tone warms (more red, less blue), whereas asthe color adjustment values increase, the color tone cools (more blue,less red). In one embodiment, blue and red values may intersecthorizontally directly in the middle of the color adjustment graph.

In one embodiment, the vertical axis represents color adjustment valuesassociated with red, green, and blue. The horizontal axis may representan input value, such as a value corresponding to a position of slidercontrol 930. A red curve 1108 represents a red adjustment value (Cr), agreen curve 1104 represents a green adjustment value (Cg), and the bluecurve 1106 represents a blue adjustment value (Cb). As shown, Cr isreduced as the input value ranges towards a cooler direction 1110, whileCb is reduced as the input value ranges towards the warmer direction1112. Each color channel (red, greed, blue) of each pixel within animage may be multiplied by a corresponding adjustment value (Cr, Cg, Cb)to yield a color-adjusted image. A cooler color-adjusted image isproduced when the user input ranges towards the cooler direction 1110,while a warmer color-adjusted image is produced when the user inputranges towards the warmer direction 1112.

FIG. 1 illustrates a user interface (UI) 1200 for a first user,according to one embodiment of the present invention. As an option, the1200 may be implemented in the context of the details of any of theFigures disclosed herein. Of course, however, the 1200 may beimplemented in any desired environment. Further, the aforementioneddefinitions may equally apply to the description below.

As shown, user interface 1200 may include a user identification 1202, aresulting image 1204, source image(s) selection 1206, color scheme(s)selection 1208, slider 1210, slider control 1212, a first indicationpoint 1214, a second indication point 1218, a middle indication point1216, and filter(s) selection 1220.

In one embodiment, the user interface 1200 may be presented for a firstuser, including, for example, a paying user, for premium access, and/ora for a full feature web application, etc. In various embodiments, suchan user interface may be adapted for mobile use and/or desktop use.

In various embodiments, a user identification may include anyidentification relating to a user, including a name, a username, anaccount id, and/or any other identification. In one embodiment, aresulting image may include a generated image (e.g. from a server, basedon modifications from one or more inputs, etc.), a blended image (e.g.from two or more images, etc.), and/or any other image associated withan image package.

In one embodiment, source image(s) selection may include the ability toselect which images are used as the basis for processing (e.g. mixing,blending, etc). For example, in one embodiment, a first image may be anambient image, and the second and third images may be flash images. Theuser may select to only include one of the two flash images.

In various embodiments, color scheme may include RGB, grayscale, CMYK,and/or a custom color scheme. Of course, in other embodiments, any colorscheme may be included. Additionally, in one embodiment, the slider maybe associated with a filter. For example, in one embodiment, a filtermay include exposure, focus, warmth, contrast, saturation, blending,gain, and/or color. Of course, in other embodiments, a filter mayinclude other parameters associated with manipulating and/or adjustingthe image. Based off of the selection of the filter, the slider mayadjust and/or change accordingly. In one embodiment, a selection ofwarmth may cause a slider to display “cooler” to one side and “warmer”to the other side.

In another embodiment, selection of a filter may cause modification ofmultiple parameters. For example, in one embodiment, a selection ofwarmth may cause a slider to display “cooler” and/or “more ambient” onone side and “warmer” and/or “more flash” to the other. Of course, anyparameters in combination may be used and manipulated by a singleslider. In another embodiment, if multiple parameters are controlled bya single slider, an option may be presented to display multiple sliders,one for each parameter which is being controlled in combination.

FIG. 13 illustrates a user interface (UI) 1300 for a second user,according to one embodiment of the present invention. As an option, theUI 1300 may be implemented in the context of the details of any of theFigures disclosed herein. Of course, however, the UI 1300 may beimplemented in any desired environment. Further, the aforementioneddefinitions may equally apply to the description below.

As shown, user interface 1300 may include a user identification 1302, aresulting image 1304, source image(s) selection 1306, color scheme(s)selection 1308, slider 1310, slider control 1312, a first indicationpoint 1314, a second indication point 1318, a middle indication point1316, and filter(s) selection 1320.

In one embodiment, the user interface 1300 may be presented for a seconduser, including, for example, a non-paying user, for free access, and/orfor a limited feature web application, etc. In various embodiments, sucha user interface may be adapted for mobile use and/or desktop use. Asshown, one or more features may be disabled due to the user interface1300 being of limited features. For example, source image(s) selection,color scheme(s) selection, and filter(s) selection may indicate “Notavailable without premium access.”

In one embodiment, the slider may alter one or more parametersassociated with the image. In another embodiment, the slider may alterthe warmth and/or control the blending associated with an image. As anexample, the slider may display “cooler” and “more ambient” to one sideand “warmer” and “more flash” to the other side. Additionally, in oneembodiment, because the user interface is of limited functionality, theuser may not have the ability to separate the slider into separatesliders fir each of the parameters included in the general slider(unlike the full functionality application which may do so). Of course,however, in other embodiments, any of the functionality of the limitedfeature application may be restricted in any manner. In one embodiment,such restrictions may be defined in the image package sent from theserver.

One advantage of the present invention is that a digital photograph maybe selectively generated based on user input using two or more differentexposures of a single capture of a photographic scene. Accordingly, thedigital photograph generated based on the user input may have a greaterdynamic range than any of the individual exposures.

Traditional techniques for generating a HDR photograph involvesignificant computational resources, as well as produce artifacts whichreduce the image quality of the resulting image. Accordingly, strictlyas an option, one or more of the above issues may or may not beaddressed utilizing one or more of the techniques disclosed herein.

Still yet, in various embodiments, one or more of the techniquesdisclosed herein may be applied to a variety of markets and/or products.For example, although the techniques have been disclosed in reference toa photo capture, they may be applied to televisions, web conferencing(or live streaming capabilities, etc.), security cameras (e.g. increasecontrast to determine characteristic, etc.), automobiles (e.g. driverassist systems, in-car infotainment systems, etc.), and/or any otherproduct which includes a camera input.

While various embodiments have been described above, it should beunderstood that they have been presented by way of example only, and notlimitation. Thus, the breadth and scope of a preferred embodiment shouldnot be limited by any of the above-described exemplary embodiments, butshould be defined only in accordance with the following claims and theirequivalents.

What is claimed is:
 1. An apparatus, comprising: a server for: receivingone or more images; analyzing the one or more images; creating aspecification referencing at least the one or more images; outputtingimage processing code referencing the specification and the one or moreimages, based on the analysis of the one or more images.
 2. Theapparatus of claim 1, wherein the apparatus is operable such that theanalyzing includes at least one of creating at least one image, creatinga high dynamic range (HDR) image, or processing at least one image. 3.The apparatus of claim 1, wherein the apparatus is operable such thatthe image processing code includes at least one image.
 4. The apparatusof claim 1, wherein the apparatus is operable such that the outputtingincludes at least one of providing access to a constructed webapplication associated with the one or more images, or pushing the webapplication associated with the one or more images to a recipient. 5.The apparatus of claim 4, wherein the apparatus is operable such thatsliding indicia is displayed utilizing the web application and the oneor more images are blended based on a first aspect, in response to thesliding indicia being manipulated by a user.
 6. The apparatus of claim5, wherein the apparatus is operable such that the first aspect includesat least one of a white balance, a focus, an exposure, a colorcorrection, or an intensity.
 7. The apparatus of claim 1, wherein theapparatus is operable such that the outputting includes at least one ofproviding access to code created for rendering vector graphics in a webapplication, or providing access to a created resulting image whichreferences one or more assets not stored on the server.
 8. The apparatusof claim 7, wherein the apparatus is operable such that the outputtingincludes providing access to a created resulting image which referencesone or more assets not stored on the server, and the apparatus isfurther operable such that the one or more assets are stored locally ona mobile device.
 9. The apparatus of claim 8, wherein the apparatus isoperable such that the image processing code references the one or moreassets stored locally on the mobile device, as well as a resulting imagestored on the server.
 10. The apparatus of claim 1, wherein theapparatus is operable for generating a resulting image based on the oneor more images, the resulting image being stored on the server.
 11. Theapparatus of claim 1, wherein the apparatus is operable for constructingtwo or more versions of a web application associated with the one ormore images.
 12. The apparatus of claim 11, wherein the apparatus isoperable such drat at least one of the two or more versions isassociated with a paying account.
 13. The apparatus of claim 12, whereinthe apparatus is operable such that the paying account is associatedwith a user identifier or a user account.
 14. The apparatus of claim 11,wherein the apparatus is operable such that at least one of the two ormore versions is associated with a free account.
 15. The apparatus ofclaim 11, wherein the apparatus is operable such that each version ofthe web application provides a different set of features, at least inpart, by which the one or more images are capable of being manipulatedutilizing the web application.
 16. The apparatus of claim 1, wherein theapparatus is operable such that analyzing the one or more imagesincludes at least one of correcting white balance, correcting exposurelevels, creating a high dynamic range (HDR) image, setting a blackpoint, setting a white point, performing a dehaze function, or adjustinga HDR strength.
 17. The apparatus of claim 16, wherein the apparatus isoperable such that analyzing the one or more images includes setting ablack point, and the apparatus is further operable such that the blackpoint is capable of being adjusted based on input by a user.
 18. Theapparatus of claim 16, wherein the apparatus is operable such thatanalyzing the one or more images includes setting a white point, and theapparatus is further operable such that the white point is capable ofbeing adjusted based on input by a user.
 19. A computer program productembodied on a non-transitory computer readable medium, comprising: codefor receiving one or more images at a server; code for analyzing the oneor more images; code for creating a specification referencing at leastthe one or more images; code for outputting image processing codereferencing the specification and the one or more images, based on theanalysis of the one or more images.
 20. A method, comprising: receivingone or more images at a server; analyzing the one or more images;creating a specification referencing at least the one or more images;outputting image processing code referencing the specification and theone or snore images, based on the analysis of the one or more images.